using Digitalmes.Domain.Entities.Mes.Masters;

namespace Digitalmes.Domain.Entities.Mes.Equipments;

/// <summary>
/// 设备表
/// </summary>
[SugarTable("equip_machinery")]
public sealed class EquipMachinery : AuditedEntity
{
    /// <summary>
    /// 设备编号
    /// </summary>
    [NotNull]
    public string? MachineryCode { get; set; }

    /// <summary>
    /// 设备名称
    /// </summary>
    [NotNull]
    public string? MachineryName { get; set; }

    /// <summary>
    /// 品牌
    /// </summary>
    public string? Brand { get; set; }

    /// <summary>
    /// 型号
    /// </summary>
    public string? Model { get; set; }

    /// <summary>
    /// 规格
    /// </summary>
    public string? Spec { get; set; }

    /// <summary>
    /// 制造商
    /// </summary>
    public string? Manufacturer { get; set; }

    /// <summary>
    /// 购置日期
    /// </summary>
    public DateTime? PurchaseDate { get; set; }

    /// <summary>
    /// 设备所在的产线 Id，0 表示不存在。
    /// </summary>
    public long LineId { get; set; }

    /// <summary>
    /// 设备所在的产线。
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(LineId))]
    public MdLine? Line { get; set; }

    /// <summary>
    /// 设备所在的工位 Id，0 表示不存在。
    /// </summary>
    public long WorkstationId { get; set; }

    /// <summary>
    /// 设备所在的工位。
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(WorkstationId))]
    public MdWorkstation? Workstation { get; set; }

    /// <summary>
    /// 设备别名，用于映射驱动点位。
    /// </summary>
    /// <remarks>在自动点检时用于找到工位上对应的设备，可能一个工位上会有多个设备，这时需要使用别名来进行定位，未设置别名时会默认查找第一个。</remarks>
    public string? Alias { get; set; }

    /// <summary>
    /// 备注
    /// </summary>
    public string? Remark { get; set; }

    /// <summary>
    /// 设备状态（如'运行'、'待机'、'故障'等）
    /// </summary>
    public int Status { get; set; }
}
